package cn.le;

/**
 * 事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为
 * @Transactional(propagation = Propagation.REQUIRED)
 */
public enum Propagation {

    //如果当前存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务
    required(0),
    //如果当前存在事务,则加入该事务,如果当前没有事务,则以为事务的方式继续运行
    supports(1),
    //如果当前存在事务,则加入该事务,如果当前没有事务,则跑出异常
    mandatory(2),
    //创建一个新的事务,如果当前存在事务,则把当前事务挂起
    required_new(3),
    //以非事务的方式运行,如果当前存在事务,则把当前事务挂起
    not_supported(4),
    //以非事务的方式运行,如果当前存在事务,则抛出异常
    never(5),
    //如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行,如果当前不存在事务,则该取值等价于
    //required
    nested(6);

    private final int value;

    private Propagation(int value){
        this.value = value;
    }

}
